﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LINQ;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        FillData();
    }

    void FillData() {
        LinqDemoDataContext data = new LinqDemoDataContext();
        var query = from a in data.Accounts
                    select a;
        gvwData.DataSource = query;
        gvwData.DataBind();       
    }

    protected void btnRefresh_Click(object sender, EventArgs e)
    {
        FillData();
    }
    /**
     * Phương thức Add new Account:
     *  Ko cần phải tạo class đối tượng, mà sử dụng trực tiếp object là table: Account được kéo vào trong
     *  LINQ: LinqDemo
     */
    void AddAccount() {        
        // Nhập dữ liệu
        Account a = new Account() { 
            Username = txtUSername.Text,
            Password = txtPassword.Text,
            Fullname = txtFullname.Text,
            Address = txtAddress.Text
        };
        // Thêm vào Database
        LinqDemoDataContext data = new LinqDemoDataContext();
        data.Accounts.InsertOnSubmit(a);
        data.SubmitChanges();
    }
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        AddAccount();
        FillData();
    }
    /* Phương thức Update dữ liệu:
     * Update dữ liệu
     */
    void Update() {
        LinqDemoDataContext data = new LinqDemoDataContext();
        //Lấy ra Account muốn update
        Account a = data.Accounts.Single(s => s.Username == txtUSername.Text);
        a.Password = txtPassword.Text;
        a.Fullname = txtFullname.Text;
        a.Address = txtAddress.Text;
        //update
        data.SubmitChanges();
    }
    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        Update();
        FillData();
    }

    /*
     * Phương thức Delete dữ liệu
     */
    void Delete()
    {
        // Lấy ra một tập hợp các Account hoặc 1 Account để xóa. Ở đây ta thực hiện phương pháp xóa bằng AccountID: Username
        LinqDemoDataContext data = new LinqDemoDataContext();
        var datadelete = from a in data.Accounts
                         where a.Username == txtUSername.Text
                         select a;
        // Co 2 phuong thuc: DeleteOnSubmit va DeleteAllOnSubmit. DeleteAllOnSubmit: trong trường hợp sử dụng câu query
        // lấy ra một tập hợp Account . Còn nếu sử dụng câu query như phần Update() là lấy ra một phần từ
        //thì dùng DeleteOnSubmit là okie.      
        data.Accounts.DeleteAllOnSubmit(datadelete);
        data.SubmitChanges();
    }

    protected void btnDelete_Click(object sender, EventArgs e)
    {
        Delete();
        FillData();
    }
}